<?php

namespace App\Http\Controllers\goods;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Http\Controllers\main\MainController as main;
use DB;

class GoodsController extends Controller
{
   

    /**
     * getList() 商品列表显示
     *
     * @return 返回商品分类列表视图
     */
    public function getList()
    { 
        
        //商品分类列表视图
        return view('admin.goods.list',['data'=>main::CateInfo(),'info'=>main::CateInfo()]);
    }

    /**
     * getList() 添加分类商品
     *
     * 
     * 
     * @return 返回商品添加分类视图,并返回给视图$data数据
     */
    public function getAdd()
    {
        
        // 商品添加分类视图
        return view('admin.goods.add',['data'=>main::CateInfo()]);
    }

    /**
     * getInsert() 执行添加分类商品
     *
     * @param   $data array 用户提交信息
     * 
     * @return 
     */
    public function postInsert(Request $request)
    {
        // 获取用户提交信息,并去除掉_token
        $data = $request -> except(['_token']);
        // 处理商品分类路径,如果是顶级分类的话(0),那么分类路径就为0
        if($data['goods_sort'] == 0){
            $data['goods_path'] = 0;
        }else{
            // 如果不是顶级分类的话,那么分类路径就为:数据库中相对分类下的路径+用户提交的商品分类id
            $path = DB::table('goods_cate') -> where('id',$data['goods_sort']) -> first();
            // 拼接路径
            $data['goods_path'] = $path['goods_path'].','.$data['goods_sort'];
        }
        // 将用户提交信息添加到数据库
        $res = DB::table('goods_cate') -> insert($data);
        // 判断是否成功插入数据库
        if($res > 0){
            // 如果插入数据成功则跳转到分类列表页
            return redirect('admin/goods/list') -> with('success','插入数据成功');
        }else{
            // 如果插入数据失败则返回添加分类页面
            return back() -> widthInput() -> with('error','插入数据失败');
        }
    }

    /**
     * getDelete()  删除用户指定分类
     * 
     * @param  $id int 用户指定删除分类的id
     * @param  $res array 分类列表下存在子分类的数组
     * @return 返回到分类列表
     */
    public function getDelete(Request $request)
    {
        // 接收用户所要删除分类的id
        $id = $request -> only('id');
        $id = $request -> only('id');
        $id = $id['id'];
        // 查询数据库获取分类信息并判断此分类下是否还有子分类
        $res = DB::table('goods_cate') -> whereIn('goods_sort',$id) -> get();
        if($res){
            // 此分类下有子分类,提示用户不允许删除
            return back() -> with('error','此分类下有子分类,请先删除子分类!');
        }else{
            // 删除分类
            DB::table('goods_cate') -> whereIn('id',$id) -> delete();
            // 此分类下没有子分类,提示删除成功
            return redirect('/admin/goods/list') -> with('success','删除成功');
        }
    }

    /**
     * getEdit()  用户修改商品分类界面
     * 
     * @param  $id int 用户指定修改分类的id
     * @param  $data array 用户修改分类单条信息
     * 
     * @return 返回到修改商品分类界面,并返回用户修改分类单条数据
     * 
     */
    public function getEdit(Request $request)
    {
        // 接收用户所要更改分类的id
        $id = $request -> only('id');
        // 遍历用户要修改分类的信息
        $data = DB::table('goods_cate') -> where('id',$id['id']) -> first();
        // 返回修改视图
        return view('admin.goods.edit',['deldata'=>$data,'data'=>main::CateInfo()]);
    }

    /**
     * postUpdata()     执行修改用户指定修改的商品分类
     * 
     * @param  $data array 用户提交信息
     * @param  $path str  分类路径
     * 
     * @return 返回修改成功或失败结果并跳转
     */
    public function postUpdate(Request $request)
    {
        //接收用户修改信息
        // dd($request -> all());
        // 获取用户提交信息,并去除掉_token
        $data = $request -> except(['_token','id']);
        // 处理商品分类路径,如果是顶级分类的话(0),那么分类路径就为0
        if($data['goods_sort'] == 0){
            $data['goods_path'] = 0;
        }else{
            // 如果不是顶级分类的话,那么分类路径就为:数据库中相对分类下的路径+用户提交的商品分类id
            $path = DB::table('goods_cate') -> where('id',$data['goods_sort']) -> first();
            // 拼接路径
            $data['goods_path'] = $path['goods_path'].','.$data['goods_sort'];
        }
        // 将用户提交信息更改数据库
        $res = DB::table('goods_cate') -> where('id',$request -> only('id')) -> update($data);
        // 判断是否成功更改数据库
        if($res > 0){
            // 如果更改数据成功则跳转到分类列表页
            return redirect('admin/goods/list') -> with('success','更改信息成功');
        }else{
            // 如果更改数据失败则返回添加分类页面
            return back() -> widthInput() -> with('error','更改信息失败');
        }
    }
    /**
     * getLimit()   搜索分页功能 
     * @return  
     */
    public function getSearch(Request $request)
    {   
        // 获取用户选择的分类搜索的父类id
        // dd($request -> all());
        $goods_sort = $request -> only('goods_sort');
        
        // 从第几条开始显示
        $offset = 0;
        // 每页显示条数
        $limits = $request -> only('limit');
        $limit = $limits['limit'];
        // 计算分类数组中的条数
        $length = count(main::CateInfo());
        // 计算共有多少页数据
        $page = ceil($length/$limit);
        // 获取分类数组中的数据并进行分页
        $data = array_slice(main::CateInfo(),$offset,$limit);
        // foreach($data as $key=>$value){
        //     $data[] = array_search($goods_sort['goods_sort'],$value);
        // }
        
        // $data = DB::table('goods_cate') ->paginate(5);
        // dd($data);
        return view('admin.goods.searchlist',['search'=>$data,'info'=>main::CateInfo()]) -> with('limit',$limit);
        
    }
    
}
